<?php


namespace app\admin\model;

use think\Model;

/***
 * Class AdminMenu
 * @package app\admin\model
 * @Author Vee7
 * @Date 2021/12/14
 * @Time 13:17
 * @Description 后台菜单模型
 */
class AdminMenu extends Model
{
    protected $table = 'admin_menu';
    //定义主键
    protected $pk = 'id';
    // 设置当前模型的数据库连接
    protected $connection = 'mysql';

    //自动写入时间戳
    protected $autoWriteTimestamp = true;

    //定义时间戳字段名（如果字段非默认的名字）
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';

    // 设置字段信息
    protected $schema = [
        'id'          => 'int',         //id
        'parent_id'        => 'int',    //父id   0：顶级菜单
        'icon'  => 'string',            //图标
        'title'      => 'string',       //名称
        'route'  => 'string',           //对应路由
        'position'       => 'int',      //展示位置 0：侧边栏 1：顶部导航
        'status'        => 'int',       //状态    0：关闭 1：开启
        'show'  => 'int',               //是否显示 0：不显示 1：显示
        'sort'        => 'int',         //排序    值越大越靠前
        'create_time' => 'datetime',    //创建时间
        'update_time' => 'datetime',    //更新时间
    ];

    // 模型初始化
    protected static function init()
    {
        //TODO:初始化内容
    }

    //########## 封装自定义模型方法（官方称为：查询范围）
    //使用查询范围后，只能使用find或者select查询。
    //方法格式：scope+方法名
    public function scopeTest($query)
    {
        //查询name为thinkphp的数据，只获取id，name字段
        //控制器通过Test::scope('thinkphp')->find();调用
        $query->where('name','thinkphp')->field('id,name');
    }

    public function scopeAge($query)
    {
        //查询年龄大于20的十条数据
        //Test::scope('age')->select();
        $query->where('age','>',20)->limit(10);
    }
    //还可以同时查询 查找name为thinkphp的用户并且年龄大于20的10个用户
    //Test::scope('thinkphp,age')->select();

    //###### 额外参数
    public function scopeEmail($query, $email)
    {
        $query->where('email', 'like', '%' . $email . '%');
    }

    public function scopeScore($query, $score)
    {
        $query->where('score', '>', $score);
    }
    //// 查询email包含thinkphp和分数大于80的用户
    //Test::email('thinkphp')->score(80)->select();

    // 定义全局的查询范围
//    protected $globalScope = ['status'];
    //定义后该模型下每条查询都会附带scopeStatus该方法
    // 也可以动态关闭全局查询范围
    //Test::withoutGlobalScope()->select();
    // 或关闭指定的全局查询范围
    //Test::withoutGlobalScope(['status'])->select();

//    尽量不要在有渲染的情况下使用获取器，因为前端获取到的值将是获取器返回的值而不是数据库值，不符合规范
//    public function getStatusAttr($value)
//    {
//        $status = [-1=>'删除',0=>'禁用',1=>'正常',2=>'待审核'];
//        return $status[$value];
//        //$user = User::find(1);
//        //echo $user->status; // 将会输出“正常”等转换后的结果
//    }
//
//    public function getShowAttr($value)
//    {
//        $show = [0=>'不显示',1=>'显示'];
//        return $show[$value];
//    }
//
//    public function getPositionAttr($value)
//    {
//        $show = [0=>'侧边栏',1=>'顶部菜单'];
//        return $show[$value];
//    }


}